[id].vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <!-- 头部 -->
  3. <templateHead v-if="skinId<=4"></templateHead>
  4. <!-- 皮肤5头部 -->
  5. <templateHead5 v-if="skinId==5"></templateHead5>
  6. <!-- 皮肤6头部 -->
  7. <templateHead6 v-if="skinId==6"></templateHead6>
  8. <!-- 菜单 -->
  9. <templateMenu v-if="skinId<=4"></templateMenu>
  10. <!-- 皮肤5菜单 -->
  11. <templateMenu5 v-if="skinId>=5"></templateMenu5>
  12. <!-- 内容 -->
  13. <div v-for="(item,index) in templateData" :key="index">
  14. <!--广告组件-->
  15. <div v-if="item.sectorName=='adSector'">
  16. <templateAd :skinId="skinId" :adData="adData" :adTag="item.ad.ad_tag"></templateAd>
  17. </div>
  18. <!--资讯正文-->
  19. <div v-if="item.sectorName=='articleSector'">
  20. <templateArticle :skinId="skinId" :templateData="item.componentList" :articleData="articleData" :routeId="routeId"></templateArticle>
  21. </div>
  22. </div>
  23. <!-- 底部 -->
  24. <templateFoot v-if="skinId<=4"></templateFoot>
  25. <!-- 皮肤5底部 -->
  26. <templateFoot1 v-if="skinId>=5"></templateFoot1>
  27. </template>
  28. <script setup lang="ts">
  29. import type { IArticleDetail,ISurveyResult,ISurveyResultData } from '@/utils/dataInterface';
  30. //0.加载全局模板组件 start---------------------------------------->
  31. //0.1全局通栏
  32. import templateHead from '@/components/template/sector/head/1200x200/1.vue'
  33. import templateHead5 from '@/components/template/sector/head/1200x250/1.vue'
  34. import templateHead6 from '@/components/template/sector/head/1200x250/6.vue'
  35. import templateMenu from '@/components/template/sector/menu/1200x130/1.vue'
  36. import templateMenu5 from '@/components/template/sector/menu/1200x187/1.vue'
  37. import templateFoot from '@/components/template/sector/foot/1200x580/1.vue'
  38. import templateFoot1 from '@/components/template/sector/foot/1200x680/1.vue'
  39. //0.2局部通栏
  40. //0.2.1广告组件
  41. import templateAd from '@/components/template/sector/body/ad/1200x90/1.vue'
  42. //0.2.2资讯正文通栏
  43. import templateArticle from '@/components/template/sector/body/article/article/1200x1710/1.vue'
  44. //0.加载全局模板组件 end---------------------------------------->
  45. //1.获得基本信息单元 start---------------------------------------->
  46. //1.1获得页面依赖
  47. import { ref, onMounted } from 'vue';
  48. //1.2使用url查询导航池id
  49. const targetSegment = getRoutePath(1);//当前页面的url路径 这是第一层 所以获得域名后面的第一层url
  50. const routeId = ref<number>(0);//当前url路径代表的cid
  51. const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
  52. method: 'GET',
  53. query: {
  54. 'pinyin': targetSegment,
  55. },
  56. });
  57. if (getRouteId.code == 200) {
  58. routeId.value = getRouteId.data.category_id
  59. }
  60. //1.3获得pinia源
  61. import { useTemplateBaseStore } from '@/stores/templateBase'
  62. const templateBaseStore:any = useTemplateBaseStore()
  63. //1.4获得该页的皮肤id - 在每个组件中也是同样的获得方法
  64. const skinId = ref<number>(0)
  65. const websiteId = ref<number>(0)
  66. //1.5获得站点基本信息
  67. const responseStatus:any = await requestDataPromise('/web/getWebsiteAllinfo', {
  68. method: 'GET',
  69. query: {
  70. 'link_textnum':24,
  71. 'link_imgnum':18,
  72. 'link_footnum':4
  73. },
  74. });
  75. if (responseStatus.code == 200) {
  76. if(responseStatus.data.website_foot.foot_info.status == 1){
  77. //网站模板已停用,直接转入404页面
  78. navigateTo('/error?findPage=index')
  79. }else{
  80. //1.6.1设置站点基本信息
  81. templateBaseStore.setWebSiteInfo(responseStatus.data)
  82. websiteId.value = responseStatus.data.website_head.id;
  83. //1.6.2设置皮肤id
  84. skinId.value = templateBaseStore.webSiteInfo.website_foot.foot_info.template_id;
  85. }
  86. }
  87. //1.获得基本信息单元 end---------------------------------------->
  88. //2.页面数据 start---------------------------------------->
  89. //2.1获得页面数据
  90. const response:any = await requestDataPromise('/client/indexData', {
  91. method: 'POST',
  92. body: {
  93. 'website_id':websiteId.value,
  94. 'getpage':'article'
  95. },
  96. });
  97. //2.2模板数据
  98. const templateData = response.data.template.article;
  99. //是否启用搜索功能
  100. templateBaseStore.setIsSearch(response.data.isSearch)
  101. console.log(templateData)
  102. //2.3广告数据
  103. const adData = ref<any[]>([]);
  104. adData.value.push(response.data.ad.top)
  105. for(let item of response.data.ad.article){
  106. adData.value.push(item)
  107. }
  108. templateBaseStore.setAdList(adData.value)
  109. //2.4获得文章详情
  110. const route:any = useRoute();
  111. const articleId = parseInt(route.params.id); //获得该页面的id
  112. const articleData = ref<IArticleDetail>({
  113. title:'',
  114. introduce:'',
  115. keyword:'',
  116. author:'',
  117. copyfrom:'',
  118. content:'',
  119. website_name:'',
  120. updated_at:'',
  121. suffix:''
  122. });
  123. const mkdata = await requestDataPromise('/web/selectWebsiteArticleInfo', {
  124. method: 'GET',
  125. query: {
  126. 'articleid': articleId
  127. },
  128. });
  129. if (mkdata.code == 200) {
  130. //设置文章正文
  131. articleData.value = mkdata.data;
  132. //设置seo
  133. let seoTitle = mkdata.data.title;
  134. let seoDescription = mkdata.data.introduce;
  135. let seoKeywords = mkdata.data.keyword;
  136. let seoSuffix = mkdata.data.suffix;
  137. let seoName = mkdata.data.website_name;
  138. useHead({
  139. title: seoTitle + "_" + seoName + "_" + seoSuffix,
  140. meta: [
  141. { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
  142. { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
  143. ]
  144. });
  145. }
  146. //2.页面数据 end---------------------------------------->
  147. </script>
  148. <style lang="less" scoped>
  149. @import url('@/assets/css/detail.less');
  150. </style>